/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package flowshop.Bees;

import java.util.Map;
import java.util.TreeMap;

/**
 *
 * @author Dawid
 */
public class BeeScheduler extends AbstractScheduler {
    private static final Map<String, String> _params = new TreeMap<String, String>();
    private static final Map<String, String> _descs = new TreeMap<String, String>();
    
    static {
        _params.put("cycleCount", "1000"); 
        _params.put("foodSourcesNumber", "120"); 
        _params.put("onlookerBeesNumber", "240"); 
        _params.put("scoutBeesCount", "24"); 
        _params.put("mutateMode", "4"); 
        _params.put("ifLocalSearch", "0"); 
        _params.put("scoutMode", "0"); 
        
       _descs.put("cycleCount", "Ilośc cykli"); 
        _descs.put("foodSourcesNumber", "Ilość źródeł pożywienia == ilośc zatrudnionych pszczół poszukujacych pożywienia (employedBees)"); 
        _descs.put("onlookerBeesNumber", "Ilość pszczół obserwatorów przeszukujące sąsiedztwo danego źródła (onlookerBeesNumber), najlepiej 2*employedBees"); 
        _descs.put("scoutBeesCount", "Ilośc pszczół zwiadowców - każda z nich usuwa najgorsze dotychczasz źródlo pożywienia i znjaduje nowe losowe, najlepiej 0,2*employedBees"); 
        _descs.put("mutateMode", "Tryb znajdowania sąsiedztwa dla danego rozwiązania: 0 - jedna zamiana, 1 - jedno wstawienie, 2 - dwie zamiany, 3 - dwa wstawienia, 4 - przy każdej mutacji rozwiązania wybierana jest losowa opcja"); 
        _descs.put("ifLocalSearch", "Decyduje czy dodatkowo używac lokalnego przeszukiwania sąsiedztwa,0- wyłączone/1 - włączone (extremalnie zwieksza czas wykonannia =])");    
        _descs.put("scoutMode", "Określa kryterium, wg którego wybierane jest najgorsze rozwiazanie: 0-rozwiazanie najgorsze jakosciowo, 1-rozwiazanie, ktorego najdluzej nie udalo sie poprawic, preferowane 0");    
        
    }
    
    public BeeScheduler (int[][] jobList, ResultListener listener, 
                             Map<String, String> params){
        super(jobList, listener, params);
    }
    
    public static Map<String, String> getParamsPresets() {
        return _params;
    }

    public static Map<String, String> getParamsDescs() {
        return _descs;
    }

    @Override
    public boolean isCorrect(String parameter, String value) {
        return true;
    }
    
    @Override
    public void run(){
    	BeeColony bee = new BeeColony(_jobs, _result, _parameters);
    	bee.optimize();
    }
}
